"""
文件的读取操作

基础操作有3个步骤：
- 打开
- 读写
- 关闭


语法解释：

open(name,mode,encoding)

mode:
- r  读取 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
- w  写入（会覆盖原有内容）打开一个文件只用于写入。如果该文件已存在则打开文件，并从开头开始编辑，原有内容会被删除。如果该文件不存在，创建新文件。
- a  追加（不存在则创建）打开一个文件用于追加。如果该文件已存在，新的内容将会被写入到已有内容之后。 如果该文件不存在，创建新文件进行写入。
"""
import time

print("--------------------------打开文件 open()")
# 打开文件(使用的是位置传参和关键字传参，那么utf-8为啥必须是关键字传入呢？因为查看源码可知encoding并不是在第3个顺序，因此只能用关键字)
f1 = open("./02.txt", mode="r", encoding="UTF-8")
print(type(f1))

# print("--------------------------读取文件 read(num)")
# # num表示要从文件中读取的数据的长度（单位是字节），如果没有传入num，那么就表示读取文件中所有的数据。
# print(f"读取第10个字节的数据：{f1.read(10)}")
# print(f"读取全部的数据：{f1.read()}")

print("--------------------------读取文件 readlines()")
# readlines可以按照行的方式把整个文件中的内容进行一次性读取，并且返回的是一个列表，其中每一行的数据为一个元素。
ret2 = f1.readlines()
print(type(ret2))
print(f"readlines()读取的内容是：{ret2}")  # 发现为空，因为上面的【读取文件 read(num)】已经读完了，指针已经在最后了没有文字了，此行就不在读取了
#如果要测试readlines()方法。需要将上面的【读取文件 read(num)】注释掉


print("--------------------------读取文件 readline()")

f2 = open("./02.txt", mode="r", encoding="UTF-8")
print("第一行数据：", f2.readline())
print("第二行数据：", f2.readline())
print("第三行数据：", f2.readline())


print("--------------------------读取文件 for循环")
for line in f2:
    print("每一行的数据是：",line)


print("--------------------------读取文件 关闭文件的读取，解除对其的占用")
# 模拟暂停，然后删除文件、修改、都不让操作，会提示已占用（Mac下未发现）
# time.sleep(10000)
f2.close()

print("--------------------------读取文件 with open()方式")
# with的方式会自动关闭文件的占用，不用手动编写了
with open("./02.txt", mode="r", encoding="UTF-8") as f4:
    for line in f4:
        print(line)
